<template>
    <!-- 组件的结构 -->
    <div>
        <h1>当前求和为：{{sum}}</h1>
        <h3>当前求和放大十倍：{{bigSum}}</h3>
        <h3>我在{{school}},学习{{subject}}</h3>
        <h3 style="color:red;">下方组件的总人数是:{{personList.length}}</h3>
        <select name="" id="" v-model="n"> 
            <option :value="1">1</option>
            <option :value="2">2</option>
            <option :value="3">3</option>
        </select>
        <button @click="increment(n)">+</button>
        <button @click="decrement(n)">-</button>
        <button @click="incrementOdd(n)">当前求和为奇数再加</button>
        <button @click="incrementWait(n)">等一等再加</button>
    </div>  
</template>

<script>
    import {mapState,mapGetters,mapMutations,mapActions} from 'vuex' //映射状态
    export default{
            name:'Count-test',
            data(){
                return{
                    n:1//用户选择的数字 
                }
            },
            computed:{
                //靠程序员亲自去写计算属性
                /* sum(){
                    return this.$store.state.sum
                },
                school(){
                    return this.$store.state.school
                },
                subject(){
                    return this.$store.state.subject
                }, */

                //借助mapState生成计算属性 从state中读取数据(对象写法)
              /*   ...mapState({//ES6语法 相当于取出对象中的属性值
                    sum:'sum',
                    school:'school',
                    subject:'subject'
                }), */
                //借助mapState生成计算属性 从state中读取数据(数组写法)
                ...mapState([//ES6语法 相当于取出对象中的属性值
                    'sum',
                    'school',
                    'subject',
                    'personList'
            ]),
                /* bigSum(){
                    return this.$store.getters.bigSum
                }, */

                //借助mapGetters生成计算属性 从getters中读取数据(数组写法)
                ...mapGetters([//ES6语法 相当于取出对象中的属性值
                    'bigSum'
            ]),

              //借助mapGetters生成计算属性 从getters中读取数据(对象写法)
              /*   ...mapGetters({//ES6语法 相当于取出对象中的属性值
                    bigSum:'bigSum'
                }), */
                
            },
            methods:{
               /*  increment(){//没有(复杂)业务逻辑可以直接利用commit跟mutations对话
                    this.$store.commit('JIA',this.n)
                },
                decrement(){
                    this.$store.commit('JIAN',this.n)
                }, */

                //借助mapMutations生成对应的方法，方法中会调用commit去联系mutations(对象写法)
                ...mapMutations({
                    increment:'JIA',
                    decrement:'JIAN'
                }),

               /*  //借助mapMutations生成对应的方法，方法中会调用commit去联系mutations(数组写法)
                ...mapMutations([//ES6语法 相当于取出对象中的属性值
                    'JIA',//上面的函数名也得改
                    'JIAN'
                ]), */


                /* incrementOdd(){
                        this.$store.dispatch('jiaOdd',this.n)
                },
                incrementWait(){
                        this.$store.dispatch('jiaWait',this.n)
                } */

                //借助mapActions生成对应的方法，方法中会调用dispatch去联系mutations(对象写法)
                ...mapActions({
                    incrementOdd:'jiaOdd',
                    incrementWait:'jiaWait'
                }),

              /*   //借助mapActions生成对应的方法，方法中会调用dispatch去联系mutations(数组写法)
                ...mapActions([
                    'jiaOdd',//上面的函数名也得改
                    'jiaWait'
            ]), */
            },
            mounted() {
                
            },
            }
</script>

<style scoped>
  button{
        margin-left: 5px;
    }
</style>